export default (app: any) => {
  app.directive("input", {
    mounted(el, binding, vnode) {
      const input =
        el.querySelector(".im-input") ||
        el.querySelector("input") ||
        el.querySelector("textarea") ||
        el;
      input.addEventListener("compositionstart", () => {
        vnode.locking = true; // 解决中文输入双向绑定失效
      });
      input.addEventListener("compositionend", () => {
        vnode.locking = false; // 解决中文输入双向绑定失效
        input.dispatchEvent(new Event("input"));
      });

      const bindKeyup = () => {
        if (vnode.locking) {
          return;
        }
        // v-input.num
        if (binding.modifiers.num) {
          // 只能输入数字（开头可以多个0）
          onlyNum(input);
        }
        // v-input.num_point
        if (binding.modifiers.num_point) {
          // 只能输入数字+小数点（可以多个小数点）
          onlyNumPoint(input);
        }
        // v-input.float
        if (binding.modifiers.float) {
          // 只能输入浮点型（只能一个小数点）
          onlyFloat(input, binding.value);
        }
        //  v-input.int
        if (binding.modifiers.int) {
          // 只能输入整数（0+正整数）（开头不能多个0）
          onlyInt(input);
        }
        // v-input.intp
        if (binding.modifiers.intp) {
          // 只能输入正整数
          onlyIntp(input);
        }
        // v-input.alp
        if (binding.modifiers.alp) {
          // 只能输入字母
          onlyAlp(input);
        }
        // v-input.num_alp
        if (binding.modifiers.num_alp) {
          // 只能输入数字+字母
          onlyNumAlp(input);
        }
        // v-input.arith
        if (binding.modifiers.arith) {
          // 四则运算符+数字
          onlyArith(input);
        }
        // v-input.phone
        if (binding.modifiers.phone) {
          // 手机 11位数字
          onlyPhone(input);
        }

        // v-input.trim
        if (binding.modifiers.trim) {
          // 去除前后空格
          onlyTrim(input);
        }

        // v-input.textFilter
        if (binding.modifiers.textFilter) {
          // 去除特殊字符
          only_limit_charts(input);
        }

        input.dispatchEvent(new Event("input"));
      };
      input.onkeyup = bindKeyup;
    },
  });
};
